🦠 Visualização de Dados da COVID-19¶

🏁 Introdução¶

Utilização de dados do AWS COVID-19 data lake para analisar informações precisas sobre a disseminação, mortes e vacinas do coronavírus (SARS-CoV-2).

Com esses dados, há a apresentação de diversas visualizações, explorando várias correlações entre eles. Destacam-se o gráfico de barras, que compara a disponibilidade de leitos hospitalares entre diferentes regiões, e o mapa interativo da linha do tempo, que mostra a evolução de mortes mundialmente.

O objetivo principal é compreender as informações obtidas no data lake e apresentar as visualizações mais eficazes para gerar insights pertinentes.

📚Importação das bibliotecas¶

In [1]:
import numpy as np
import pandas as pd
from io import StringIO
import plotly.express as px
import plotly.offline as pyo
pyo.init_notebook_mode()
from us_elections_president.filtered_data import elections_president_2020
from config.aws_config import session, BUCKET_NAME, BUCKET_FOLDER_HOSPITAL_BEDS, BUCKET_FOLDER_CASES_AND_DEATHS, BUCKET_FOLDER_GLOBAL_DEATHS, \
    BUCKET_FOLDER_VACCINATED_PER_HUNDRED, BUCKET_FOLDER_VACCINES_AND_VACCINATED

🔒 Recuperando credenciais da AWS e configurando a conexão S3¶

In [2]:
def run_s3(bucket_folder):
    s3_client = session.client('s3')
    response = s3_client.list_objects_v2(Bucket=BUCKET_NAME, Prefix=bucket_folder)

    if 'Contents' not in response:
        print("No objects found in the bucket or the folder key is incorrect.")
        return None

    latest_obj = max(response['Contents'], key=lambda x: x['LastModified'])

    response = s3_client.get_object(Bucket=BUCKET_NAME, Key=latest_obj['Key'])
    data = response['Body'].read().decode('utf-8')
    latest_data_frame = pd.read_csv(StringIO(data))

    return latest_data_frame   

👓Análises e Visualizações¶

1. Estados Americanos e camas disponíveis¶

Relação entre quantidade de leitos disponívveis em cada Estado Americano para auxílio no tratamento do coronavírus.

In [3]:
data_frame = run_s3(BUCKET_FOLDER_HOSPITAL_BEDS)

fig = px.bar(data_frame,
            x='hq_state', 
            y='total_staffed_beds', 
            color='hq_state', 
            labels={'hq_state': 'Estado', 'total_staffed_beds': 'Total de camas disponíveis'},
            title='Estados Americanos e camas disponíveis')

pyo.iplot(fig, filename = 'available-beds')

2. Estados Americanos: Casos e Mortes¶

Linha do tempo pelos mêses de 2020 apresentando a evolução dos casos e mortes de americanos.

In [4]:
data_frame = run_s3(BUCKET_FOLDER_CASES_AND_DEATHS)

fig = px.scatter(data_frame,
                x='total_cases',
                y='total_deaths',
                animation_frame='month',
                animation_group='state_name',
                color='state_name',
                hover_name='state_name',
                size='total_cases',
                log_x=True,
                size_max=55,
                range_x=[min(data_frame['total_cases']), max(data_frame['total_cases'])*1.5],
                range_y=[min(data_frame['total_deaths']), max(data_frame['total_deaths'])],
                labels={'state_name':'Estado', 'month':'Mês', 'total_deaths':'Mortes', 'total_cases':'Casos'},
                title='Evolução Mensal de Casos e Mortes por COVID-19 por Estado Americano')
  
pyo.iplot(fig, filename='us-cases-and-deaths')

3. Mortes mundialmente¶

Linha do tempo pelos mêses de 2020 retratando mortes ao redor do mundo causadas pelo COVID-19.

In [5]:
data_frame = run_s3(BUCKET_FOLDER_GLOBAL_DEATHS)
data_frame['log_scaled_deaths'] = np.log10(data_frame['deaths_on_last_day'] + 1) * 5

fig = px.scatter_geo(data_frame,
                    locations='country_name',
                    locationmode='country names',
                    template='seaborn',
                    color='country_name', 
                    size='log_scaled_deaths',  
                    hover_data={'deaths_on_last_day': True, 'log_scaled_deaths': False}, 
                    animation_frame='month', 
                    projection="natural earth",
                    labels={'country_name':'País', 'month':'Mês', 'deaths_on_last_day':'Total de mortes no fim do mês'},
                    title="Evolução Mensal de Mortes por COVID-19 mundialmente",
                    size_max=10) 
    
pyo.iplot(fig, filename='global-deaths')

4. Estados Americanos e a média de vacinas por 100 habitantes¶

Mesclado com as maiores quantidades de votos para partidos eleitorais nas eleições de 2020¶

10 Maiores e Menores médias de pessoas totalmente vacinadas nos Estados Americanos, mesclada com dados sobre os partidos mais votados nesses estados nas eleições preidenciais de 2020.

In [6]:
data_frame = run_s3(BUCKET_FOLDER_VACCINATED_PER_HUNDRED)
data_frame.rename(columns={'location':'Estado'}, inplace=True)

most_votes_by_party_df = elections_president_2020()
combined_elections_president_2020_with_averange_vaccinated_per_hundred_df = pd.merge(data_frame, most_votes_by_party_df, on='Estado', how='left')
combined_elections_president_2020_with_averange_vaccinated_per_hundred_df['party_simplified'] = combined_elections_president_2020_with_averange_vaccinated_per_hundred_df['party_simplified'].fillna('NO DATA')
combined_elections_president_2020_with_averange_vaccinated_per_hundred_df['should_render_party_simplified_and_votes'] = combined_elections_president_2020_with_averange_vaccinated_per_hundred_df['party_simplified'] != 'NO DATA'
combined_elections_president_2020_with_averange_vaccinated_per_hundred_df['hover_candidatevotes'] = combined_elections_president_2020_with_averange_vaccinated_per_hundred_df.apply(
    lambda row: row['candidatevotes'] if row['should_render_party_simplified_and_votes'] else 'SEM INFORMAÇÕES',
    axis=1
)
In [7]:
PARTY_COLORS = {
    'REPUBLICAN': '#FF3333',
    'DEMOCRAT': '#0033FF',
    'LIBERTARIAN': '#FFFF33',
    'NO DATA': '#CCCCCC'
}
In [8]:
fig = px.bar_polar(combined_elections_president_2020_with_averange_vaccinated_per_hundred_df, 
                    r='average_fully_vaccinated_per_hundred', 
                    theta='Estado', 
                    color='party_simplified', 
                    color_discrete_map=PARTY_COLORS,
                    hover_data={'party_simplified': True , 'hover_candidatevotes': True}, 
                    template='plotly_white',
                    labels={'average_fully_vaccinated_per_hundred': 'Média de pessoas totalmente vacinadas por 100 habitantes',
                       'party_simplified': 'Partido mais votado',
                       'hover_candidatevotes': 'Total de votos'},
                    title='As 10 Menores e Maiores Médias de Pessoas Totalmente Vacinadas por 100 Habitantes em Estados Americanos no mês 12/2022') 
 
fig.add_annotation(
        x=0, y=1.16, 
        xref="paper", yref="paper",
        showarrow=False,
        text='Coloridas pelo Partido Eleitoral que soma o maior número nas Eleições Presidenciais de 2020',
        font=dict(size=16, color="black"),
        align="center"
)
    
fig.update_layout(polar=dict(
                    bgcolor='rgba(255, 255, 255, 0.9)',
                    radialaxis=dict(showticklabels=False)),
                    font=dict(
                        family="Courier New, monospace",
                        size=10,
                        color="darkblue"
                    ),
                    polar_angularaxis_rotation=90)
    
pyo.iplot(fig, filename='american-states-vaccines-and-votes-correlation')

5. Estados Americanos e a Quantidade de Doses Administradas por Pessoas Totalmente Vacinadas¶

Gráfico de área que demonstra a diferença entre a quantidade de doses e a quantidade de pessoas totalmente vacinadas.

In [9]:
data_frame = run_s3(BUCKET_FOLDER_VACCINES_AND_VACCINATED)

fig = px.area(data_frame, 
                x='location', 
                y=['people_fully_vaccinated', 'total_vaccinations'], 
                labels={'location':'Estado', 
                        'variable': 'Métrica',
                        'people_fully_vaccinated':'Total de doses administradas', 
                        'total_vaccinations':'Pessoas totalmente vacinadas' },
                title='Total de vacinas providenciadas ao Estado e Pessoas Totalmente Vacinadas em maio de 2023')

fig.update_layout(yaxis_title='Número de Vacinações')
pyo.iplot(fig, filename='american-states-doses-allocated-fully-vaccinated-people-correlation')

🏁Conclusão¶

Através dessa análise abrangente dos dados provenientes do AWS COVID-19 data lake, é notório a identificação de padrões críticos e correlações significativas que informam a situação passada mundialmente.

Principais Descobertas:¶

  • As flutuações mensais nos casos de COVID-19 e nas taxas de mortalidade revelam um padrão claro de ondas pandêmicas.

  • As regiões com menor capacidade hospitalar e menor acesso à vacinação experienciaram taxas de mortalidade significativamente mais altas, sugerindo que a desigualdade no acesso ao cuidado de saúde e a vacinas é um fator crítico na determinação dos resultados da saúde.

  • Houve uma correlação entre estados com mais vacinas aplicadas e votos em candidatos democratas.

  • Existe uma disparidade entre a quantidade de vacinas alocadas e a quantidade de pessoas totalmente vacinadas nos Estados Americanos. Os estados recebem vacinas mas nem todas as pessoas tomam todas as doses de vacinas.

Implicações:¶

Esses padrões sublinham a necessidade de políticas públicas adaptadas que respondam às características demográficas e às capacidades de saúde locais. O sucesso na redução dos picos de infecção e na minimização do impacto nos serviços de saúde depende crucialmente de respostas rápidas e bem informadas às tendências emergentes da pandemia.